package com.redisson.annotate;

import org.redisson.api.RateType;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

@Documented
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RateLimiter {

    /**
     * RRateLimiter 限流模式
     * OVERALL     所有客户端加总限流 全局限流
     * PER_CLIENT  每个客户端单独计算流量 单机限流
     */
    RateType mode() default RateType.PER_CLIENT;

    /**
     * Spel表达式
     */
    String[] keys() default {};

    /**
     * 单位时间产生的令牌数，默认100
     */
    long rate() default 100;

    /**
     * 时间间隔，默认1秒
     */
    long rateInterval() default 1;

    TimeUnit rateIntervalUnit() default TimeUnit.SECONDS;

    /**
     * 拒绝请求时的提示信息
     */
    String showPromptMsg() default "服务器繁忙，请稍候再试";

}

